home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / rpncal / rpncalc.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1995-05-07  |  15.7 KB  |  549 lines

  1. VERSION 2.00
  2. Begin Form Calculator 
  3.    BackColor       =   &H00C0C000&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "RPN Calculator"
  6.    ClientHeight    =   3660
  7.    ClientLeft      =   1170
  8.    ClientTop       =   3735
  9.    ClientWidth     =   3690
  10.    FontBold        =   -1  'True
  11.    FontItalic      =   0   'False
  12.    FontName        =   "System"
  13.    FontSize        =   9.75
  14.    FontStrikethru  =   0   'False
  15.    FontUnderline   =   0   'False
  16.    Height          =   4065
  17.    Icon            =   RPNCALC.FRX:0000
  18.    KeyPreview      =   -1  'True
  19.    Left            =   1110
  20.    LinkMode        =   1  'Source
  21.    LinkTopic       =   "Form1"
  22.    MaxButton       =   0   'False
  23.    ScaleHeight     =   3660
  24.    ScaleWidth      =   3690
  25.    Top             =   3390
  26.    Width           =   3810
  27.    Begin CommandButton Enter 
  28.       Caption         =   "Enter"
  29.       Default         =   -1  'True
  30.       Height          =   1095
  31.       Left            =   1920
  32.       TabIndex        =   1
  33.       Top             =   2400
  34.       Width           =   495
  35.    End
  36.    Begin CommandButton LastX 
  37.       Caption         =   "L"
  38.       Height          =   495
  39.       Left            =   3120
  40.       TabIndex        =   0
  41.       Top             =   1800
  42.       Width           =   495
  43.    End
  44.    Begin CheckBox FixDec 
  45.       Caption         =   "Check1"
  46.       Height          =   255
  47.       Left            =   240
  48.       TabIndex        =   2
  49.       TabStop         =   0   'False
  50.       Top             =   840
  51.       Width           =   255
  52.    End
  53.    Begin CommandButton Number 
  54.       Caption         =   "7"
  55.       Height          =   480
  56.       Index           =   7
  57.       Left            =   120
  58.       TabIndex        =   3
  59.       TabStop         =   0   'False
  60.       Top             =   1200
  61.       Width           =   480
  62.    End
  63.    Begin CommandButton Number 
  64.       Caption         =   "8"
  65.       Height          =   480
  66.       Index           =   8
  67.       Left            =   720
  68.       TabIndex        =   4
  69.       TabStop         =   0   'False
  70.       Top             =   1200
  71.       Width           =   480
  72.    End
  73.    Begin CommandButton Number 
  74.       Caption         =   "9"
  75.       Height          =   480
  76.       Index           =   9
  77.       Left            =   1320
  78.       TabIndex        =   5
  79.       TabStop         =   0   'False
  80.       Top             =   1200
  81.       Width           =   480
  82.    End
  83.    Begin CommandButton Number 
  84.       Caption         =   "4"
  85.       Height          =   480
  86.       Index           =   4
  87.       Left            =   120
  88.       TabIndex        =   6
  89.       TabStop         =   0   'False
  90.       Top             =   1800
  91.       Width           =   480
  92.    End
  93.    Begin CommandButton Number 
  94.       Caption         =   "5"
  95.       Height          =   480
  96.       Index           =   5
  97.       Left            =   720
  98.       TabIndex        =   7
  99.       TabStop         =   0   'False
  100.       Top             =   1800
  101.       Width           =   480
  102.    End
  103.    Begin CommandButton Number 
  104.       Caption         =   "6"
  105.       Height          =   480
  106.       Index           =   6
  107.       Left            =   1320
  108.       TabIndex        =   8
  109.       TabStop         =   0   'False
  110.       Top             =   1800
  111.       Width           =   480
  112.    End
  113.    Begin CommandButton Number 
  114.       Caption         =   "1"
  115.       Height          =   480
  116.       Index           =   1
  117.       Left            =   120
  118.       TabIndex        =   9
  119.       TabStop         =   0   'False
  120.       Top             =   2400
  121.       Width           =   480
  122.    End
  123.    Begin CommandButton Number 
  124.       Caption         =   "2"
  125.       Height          =   480
  126.       Index           =   2
  127.       Left            =   720
  128.       TabIndex        =   10
  129.       TabStop         =   0   'False
  130.       Top             =   2400
  131.       Width           =   480
  132.    End
  133.    Begin CommandButton Number 
  134.       Caption         =   "3"
  135.       Height          =   480
  136.       Index           =   3
  137.       Left            =   1320
  138.       TabIndex        =   11
  139.       TabStop         =   0   'False
  140.       Top             =   2400
  141.       Width           =   480
  142.    End
  143.    Begin CommandButton Number 
  144.       Caption         =   "0"
  145.       Height          =   480
  146.       Index           =   0
  147.       Left            =   120
  148.       TabIndex        =   12
  149.       TabStop         =   0   'False
  150.       Top             =   3000
  151.       Width           =   1080
  152.    End
  153.    Begin CommandButton Decimal 
  154.       Caption         =   "."
  155.       Height          =   480
  156.       Left            =   1320
  157.       TabIndex        =   13
  158.       TabStop         =   0   'False
  159.       Top             =   3000
  160.       Width           =   480
  161.    End
  162.    Begin Image Pi 
  163.       Height          =   480
  164.       Left            =   3120
  165.       Picture         =   RPNCALC.FRX:0302
  166.       Top             =   600
  167.       Width           =   480
  168.    End
  169.    Begin Image XSquare 
  170.       Height          =   480
  171.       Left            =   3120
  172.       Picture         =   RPNCALC.FRX:0604
  173.       Top             =   1200
  174.       Width           =   480
  175.    End
  176.    Begin Label LabelFix 
  177.       Alignment       =   2  'Center
  178.       BackColor       =   &H00C0C000&
  179.       Caption         =   "Fix 4"
  180.       FontBold        =   -1  'True
  181.       FontItalic      =   0   'False
  182.       FontName        =   "System"
  183.       FontSize        =   9.75
  184.       FontStrikethru  =   0   'False
  185.       FontUnderline   =   0   'False
  186.       Height          =   255
  187.       Left            =   105
  188.       TabIndex        =   14
  189.       Top             =   600
  190.       Width           =   510
  191.    End
  192.    Begin Image Change 
  193.       Height          =   480
  194.       Left            =   2520
  195.       Picture         =   RPNCALC.FRX:0906
  196.       Top             =   1800
  197.       Width           =   480
  198.    End
  199.    Begin Image SquareRoot 
  200.       Height          =   480
  201.       Left            =   2520
  202.       Picture         =   RPNCALC.FRX:0C08
  203.       Top             =   1200
  204.       Width           =   480
  205.    End
  206.    Begin Image Up 
  207.       Height          =   480
  208.       Left            =   3120
  209.       Picture         =   RPNCALC.FRX:0F0A
  210.       Top             =   2400
  211.       Width           =   480
  212.    End
  213.    Begin Image Down 
  214.       Height          =   480
  215.       Left            =   2520
  216.       Picture         =   RPNCALC.FRX:120C
  217.       Top             =   2400
  218.       Width           =   480
  219.    End
  220.    Begin Image Plus 
  221.       Height          =   480
  222.       Left            =   1920
  223.       Picture         =   RPNCALC.FRX:150E
  224.       Top             =   1200
  225.       Width           =   480
  226.    End
  227.    Begin Image Minus 
  228.       Height          =   480
  229.       Left            =   1920
  230.       Picture         =   RPNCALC.FRX:1810
  231.       Top             =   600
  232.       Width           =   480
  233.    End
  234.    Begin Image Devide 
  235.       Height          =   480
  236.       Left            =   720
  237.       Picture         =   RPNCALC.FRX:1B12
  238.       Top             =   600
  239.       Width           =   480
  240.    End
  241.    Begin Image Mult 
  242.       Height          =   480
  243.       Left            =   1320
  244.       Picture         =   RPNCALC.FRX:1E14
  245.       Top             =   600
  246.       Width           =   480
  247.    End
  248.    Begin Image SwapXY 
  249.       Height          =   480
  250.       Left            =   1920
  251.       Picture         =   RPNCALC.FRX:2116
  252.       Top             =   1800
  253.       Width           =   480
  254.    End
  255.    Begin Image xby1 
  256.       Height          =   480
  257.       Left            =   2520
  258.       Picture         =   RPNCALC.FRX:2418
  259.       Top             =   600
  260.       Width           =   480
  261.    End
  262.    Begin Image Backspace 
  263.       Height          =   480
  264.       Left            =   2520
  265.       Picture         =   RPNCALC.FRX:271A
  266.       Top             =   3000
  267.       Width           =   1080
  268.    End
  269.    Begin Label Readout 
  270.       Alignment       =   1  'Right Justify
  271.       BackColor       =   &H00FFFF80&
  272.       Caption         =   "0"
  273.       FontBold        =   0   'False
  274.       FontItalic      =   0   'False
  275.       FontName        =   "MS Sans Serif"
  276.       FontSize        =   13.5
  277.       FontStrikethru  =   0   'False
  278.       FontUnderline   =   0   'False
  279.       ForeColor       =   &H00000000&
  280.       Height          =   375
  281.       Index           =   0
  282.       Left            =   120
  283.       TabIndex        =   15
  284.       Top             =   120
  285.       Width           =   3495
  286.    End
  287. ' ------------------------------------------------------------------------
  288. '                       Public Domain
  289. '                       RPN Caculator
  290. ' ------------------------------------------------------------------------
  291. Option Explicit
  292. Dim Register(0 To 5)  As Variant       ' RPN Registers
  293.                     ' 0 = Last X
  294.                     ' 1 = x
  295.                     ' 2 = y
  296.                     ' 3 = z
  297.                     ' 4 = t
  298.                     ' 5 = temp storage
  299. Dim DecimalFlag As Integer              ' Decimal point present yet?
  300. Dim UserInput As String                 ' Numeric InPut String
  301. Dim UseStr As String                    ' Format Control String
  302. ' Event Functions ----------------------------------------------------------
  303. '----------------------------------------------------------------------------
  304. Sub BackSpace_Click ()
  305.     Call submit(Chr$(8))
  306. End Sub
  307. Sub Change_Click ()
  308.     Call submit(Chr$(241))
  309. End Sub
  310. ' Misc Functions ----------------------------------------------------------
  311. Sub CheckInput ()
  312.     If Len(UserInput) > 0 Then
  313.         Call PushUp
  314.         Register(1) = Val(UserInput)
  315.         Register(0) = Register(1)
  316.         UserInput = ""
  317.         DecimalFlag = False
  318.     End If
  319. End Sub
  320. Sub Decimal_Click ()
  321.     Call submit(".")
  322. End Sub
  323. Sub Devide_Click ()
  324.     Call submit("/")
  325. End Sub
  326. Sub Devide0 () ' Devide by zero error display
  327.     MsgBox "Attempted Devide by zero.", 48, "ERROR"
  328. End Sub
  329. Sub Down_Click ()
  330.     Call submit(Chr$(31))
  331. End Sub
  332. Sub Enter_Click ()
  333.     Call submit(Chr$(13))
  334. End Sub
  335. Sub FixDec_Click ()
  336.     If FixDec.Value = 1 Then
  337.     UseStr = "###,###,###.0000;\-###,###,###.0000;0.0000;0.0"
  338.     Else
  339.     UseStr = ""
  340.     End If
  341.     Call Ok
  342. End Sub
  343. Sub Form_KeyDown (KeyCode As Integer, Shift As Integer)
  344.     KeyCode = 0
  345. End Sub
  346. Sub Form_KeyPress (KeyAscii As Integer)
  347.     ' Readout(6).Caption = KeyAscii
  348.     If KeyAscii = 27 Then End
  349.     If KeyAscii = 8 Then Call submit(Chr$(8))
  350.     Dim k As String * 1
  351.     k = UCase$(Chr$(KeyAscii))
  352.     If InStr("0123456789XSRLC.+-*/=", k) Then
  353.     Call submit(k)
  354.     End If
  355.     KeyAscii = 0
  356. End Sub
  357. Sub Form_KeyUp (KeyCode As Integer, Shift As Integer)
  358.     ' Readout(6).Caption = KeyCode
  359.     ' NOTE: Contrary to the documentation the next line is useless !
  360.     If KeyCode = 13 Then Call submit(Chr$(13))
  361.     If KeyCode = 33 Then Call submit(Chr$(30))
  362.     If KeyCode = 34 Then Call submit(Chr$(31))
  363. End Sub
  364. ' Initialization routine for the form.
  365. Sub Form_Load ()
  366.     Calculator.Caption = App.EXEName + ".EXE"
  367.     If Left$(Calculator.Caption, 3) <> "RPN" Then
  368.         Calculator.Caption = Calculator.Caption + "  RPN"
  369.     End If
  370.     ' Calculator.Height  =   5910
  371.     ' NOTE: Contrary to the documentation the next line is useless !
  372.     Calculator.KeyPreview = True
  373.     Dim i As Integer
  374.     For i = 0 To 5
  375.         Register(i) = 0
  376.     Next i
  377.     UserInput = "0"
  378.     Call CheckInput
  379. End Sub
  380. Sub LastX_Click ()
  381.     Call submit("L")
  382. End Sub
  383. Sub Minus_Click ()
  384.     Call submit("-")
  385. End Sub
  386. Sub Mult_Click ()
  387.     Call submit("*")
  388. End Sub
  389. Sub Number_Click (Index As Integer)
  390.     Call submit(Chr$(48 + Index))
  391. End Sub
  392. Sub Number_KeyUp (Index As Integer, KeyCode As Integer, Shift As Integer)
  393.     If KeyCode = 13 Then Call submit(Chr$(13))
  394. End Sub
  395. Sub Ok ()
  396.     If Len(UserInput) > 0 Then
  397.     Readout(0) = UserInput
  398.     Else
  399.     Readout(0) = Format$(Register(1), UseStr)
  400.     ' ReadOut(1) = Register(0)
  401.     ' ReadOut(2) = Register(1)
  402.     ' ReadOut(3) = Register(2)
  403.     ' ReadOut(4) = Register(3)
  404.     ' ReadOut(5) = Register(4)
  405.     End If
  406. End Sub
  407. Sub Pi_Click ()
  408.     Call submit("P")
  409. End Sub
  410. Sub Plus_Click ()
  411.     Call submit("+")
  412. End Sub
  413. ' Stack Functions ----------------------------------------------------------
  414. ' Push Registers down, T retains Value
  415. Sub PushDown ()
  416.     Register(1) = Register(2)
  417.     Register(2) = Register(3)
  418.     Register(3) = Register(4)
  419. End Sub
  420. ' Push Registers up, X retains value
  421. Sub PushUp ()
  422.     Register(4) = Register(3)
  423.     Register(3) = Register(2)
  424.     Register(2) = Register(1)
  425. End Sub
  426. ' Rotate Register x-t (1 to 4) down
  427. Sub RollDown ()
  428.     Register(5) = Register(1)      ' Save X register
  429.     Call PushDown
  430.     Register(4) = Register(5)
  431. End Sub
  432. ' Rotate Register x-t (1 to 4) up
  433. Sub RollUp ()
  434.     Register(5) = Register(4)      ' Save T register
  435.     Call PushUp
  436.     Register(1) = Register(5)
  437. End Sub
  438. Sub SquareRoot_Click ()
  439.     Call submit("R")
  440. End Sub
  441. ' Program Core ---------------------------------------------------------------
  442. ' All input is processed here. This Subroutine is used so that multiple
  443. ' events can be mapped to the same function:
  444. ' EXAMPLE: Image Enter_Click and KeyPress (Enter)
  445. ' It also allows for a future implimentation of *.RPN script files
  446. ' or the assingment userdefined functions.
  447. Sub submit (s As String)
  448.    Select Case s
  449.     Case "."                                ' Decimal Point
  450.         If Len(UserInput) > 0 Then
  451.             If DecimalFlag = False Then UserInput = UserInput + "."
  452.         Else
  453.             UserInput = "0."
  454.         End If
  455.         DecimalFlag = True
  456.     Case "0" To "9"
  457.         UserInput = UserInput + s
  458.     Case "*"                                ' Multiply Y by X
  459.         Call CheckInput
  460.         Register(0) = Register(1)
  461.         Register(2) = Register(2) * Register(1)
  462.         Call PushDown
  463.     Case "+"                                ' Add X to Y
  464.         Call CheckInput
  465.         Register(0) = Register(1)
  466.         Register(2) = Register(2) + Register(1)
  467.         Call PushDown
  468.     Case "-"                                ' Sub X from Y
  469.         Call CheckInput
  470.         Register(0) = Register(1)
  471.         Register(2) = Register(2) - Register(1)
  472.         Call PushDown
  473.     Case "/"                                ' Devide Y by X
  474.         Call CheckInput
  475.         If Abs(Register(1)) > 0 Then
  476.             Register(0) = Register(1)
  477.             Register(2) = Register(2) / Register(1)
  478.             Call PushDown
  479.         Else
  480.             Call Devide0
  481.         End If
  482.     Case "="                                ' Exchange X and Y
  483.         Call CheckInput
  484.         Register(5) = Register(1)      ' Save X register
  485.         Register(1) = Register(2)
  486.         Register(2) = Register(5)
  487.     Case "X"                                ' X = 1/X
  488.         Call CheckInput
  489.         If Abs(Register(1)) > 0 Then
  490.             Register(0) = Register(1)
  491.             Register(1) = 1 / Register(1)
  492.         Else
  493.             Call Devide0
  494.         End If
  495.     Case Chr$(241)                          ' Change Sign of X
  496.         Call CheckInput
  497.         Register(1) = -(Register(1))
  498.     Case Chr$(30)                           ' Roll Up
  499.         Call CheckInput
  500.         Call RollUp
  501.     Case Chr$(31)                           ' Roll Down
  502.         Call CheckInput
  503.         Call RollDown
  504.     Case "S"                                ' Square (X = X * X)
  505.         Call CheckInput
  506.         Register(1) = Register(1) * Register(1)
  507.     Case "R"                                ' SquareRoot
  508.         Call CheckInput
  509.         Register(1) = Sqr(Abs(Register(1)))
  510.     Case "P"                                ' Insert Value for Pi
  511.         Call CheckInput
  512.         UserInput = "3.141592654"
  513.         Call CheckInput
  514.     Case "L"                                ' Resstore last "X" value
  515.         Call CheckInput
  516.         UserInput = Register(0)
  517.         Call CheckInput
  518.     Case Chr$(8)                            ' BackSpace
  519.         If Len(UserInput) > 0 Then
  520.             If Right$(UserInput, 1) = "." Then DecimalFlag = False
  521.             UserInput = Left$(UserInput, Len(UserInput) - 1)
  522.         Else
  523.             UserInput = "0"
  524.             Call CheckInput
  525.         End If
  526.     Case Chr$(13)                           ' Enter Key
  527.         If Len(UserInput) = 0 Then
  528.             UserInput = Format$(Register(1))
  529.         End If
  530.         Call CheckInput
  531.     Case Else
  532.         ' do nothing
  533.    End Select
  534.    Call Ok
  535.    Calculator.Enter.SetFocus
  536. End Sub
  537. Sub SwapXY_Click ()
  538.     Call submit("=")
  539. End Sub
  540. Sub Up_Click ()
  541.     Call submit(Chr$(30))
  542. End Sub
  543. Sub Xby1_Click ()
  544.     Call submit("X")
  545. End Sub
  546. Sub XSquare_Click ()
  547.     Call submit("S")
  548. End Sub
  549.